package com.vhall.component.dao.interactive;

import com.vhall.component.entity.interactive.entity.QuestionsEntity;
import com.vhall.component.entity.interactive.vo.QuestionConsoleLinkRoomListReqVO;
import com.vhall.component.entity.interactive.vo.QuestionConsoleLinkRoomListRspVO;
import com.vhall.component.entity.interactive.vo.QuestionConsoleListRspVO;
import com.vhall.component.entity.interactive.vo.QuestionListDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author guoxin.wang
 * @date 2021-05-10 15:46
 */
@Mapper
@Repository
public interface QuestionRoomMapper {

    /**
     * 根据questionid查询绑定的roomid。
     *
     * @param req 参数
     * @return 返回值
     */
    QuestionConsoleLinkRoomListRspVO selectRoomInfoByQuestionId(QuestionConsoleLinkRoomListReqVO req);

    /**
     * 查询房间信息，如果存在关联的就吧每页数量减一。并且不查询关联的房间信息。
     *
     * @param reqVO        查询参数
     * @param roomOfLinked 关联的房间信息
     * @param startIndex   开始的索引
     * @return 返回值
     */
    List<QuestionConsoleLinkRoomListRspVO> selectRoomInfoExclusiveLinkedPaged(@Param("reqVO") QuestionConsoleLinkRoomListReqVO reqVO, @Param("roomOfLinked") QuestionConsoleLinkRoomListRspVO roomOfLinked, @Param("startIndex") Integer startIndex);

    /**
     * 查询房间信息，如果存在关联的就吧每页数量减一。并且不查询关联的房间信息。查询总数。
     *
     * @param reqVO        参数
     * @param roomOfLinked 参数
     * @return 返回值
     */
    Integer selectCountOfRoomInfoExclusiveLinkedPaged(QuestionConsoleLinkRoomListReqVO reqVO, QuestionConsoleLinkRoomListRspVO roomOfLinked);

    /**
     * 查询问卷信息
     *
     * @param param      参数
     * @param keyword    参数
     * @param startIndex 参数
     * @param pageSize   参数
     * @return 返回值
     */
    List<QuestionConsoleListRspVO> selectQuestionInfo(@Param("param") QuestionsEntity param,
                                                      @Param("keyword") String keyword,
                                                      @Param("accountIds") List<Integer> accountIds,
                                                      @Param("startIndex") Integer startIndex,
                                                      @Param("pageSize") Integer pageSize);

    /**
     * 查询问卷信息
     *
     * @param keyword   参数
     * @param roomId    参数
     * @param bind      参数
     * @param publish   参数
     * @param accountIds 参数
     * @param offset    参数
     * @param size      参数
     * @return 返回值
     */
    List<QuestionListDTO> listQuestion(@Param("keyword") String keyword,
                                       @Param("roomId") String roomId,
                                       @Param("bind") Integer bind,
                                       @Param("publish") Integer publish,
                                       @Param("accountIds") List<Integer> accountIds,
                                       @Param("offset") Integer offset,
                                       @Param("size") Integer size);

    /**
     * 查询问卷信息的数目。
     *
     * @param keyword   参数
     * @param roomId    参数
     * @param bind      参数
     * @param publish   参数
     * @param accountIds 参数
     * @return 返回值
     */
    Integer countQuestion(@Param("keyword") String keyword,
                          @Param("roomId") String roomId,
                          @Param("bind") Integer bind,
                          @Param("publish") Integer publish,
                          @Param("accountIds") List<Integer> accountIds);


    /**
     * 计算房间内问卷的总数
     *
     * @param keyword 参数
     * @param roomId  参数
     * @param publish 参数
     * @return 返回值
     */
    Integer countQuestionInRoom(@Param("roomId") String roomId,
                                @Param("publish") Integer publish,
                                @Param("keyword") String keyword);

    /**
     * 观看端, 问卷列表
     *
     * @param roomId
     * @param publish
     * @param keyword
     * @param offset
     * @param size
     * @return
     */
    List<QuestionListDTO> listQuestionInRoom(@Param("roomId") String roomId,
                                             @Param("publish") Integer publish,
                                             @Param("keyword") String keyword,
                                             @Param("offset") Integer offset,
                                             @Param("size") Integer size);


    /**
     * 查询问卷信息的数目。
     *
     * @param param      参数
     * @param keyword    参数
     * @param startIndex 参数
     * @param pageSize   参数
     * @return 返回值
     */
    Integer selectCountOfQuestionInfo(@Param("param") QuestionsEntity param,
                                      @Param("keyword") String keyword,
                                      @Param("accountIds") List<Integer> accountIds,
                                      @Param("startIndex") Integer startIndex,
                                      @Param("pageSize") Integer pageSize);
}
